// vue.config.js
const { defineConfig } = require("@vue/cli-service");
const path = require("path");

function resolve(dir) {
  return path.join(__dirname, dir);
}

module.exports = defineConfig({
  transpileDependencies: true,
  lintOnSave: false,
  publicPath: "/",
  configureWebpack: {
    resolve: {
      alias: {
        "@": path.resolve(__dirname, "src"),
        "@components": path.resolve(__dirname, "src/components"),
        "@views": path.resolve(__dirname, "src/views"),
        "@utils": path.resolve(__dirname, "src/utils"),
        "@assets": path.resolve(__dirname, "src/assets"), // 新增assets别名
        "@icons": path.resolve(__dirname, "src/icons/svg"), // 直接指向svg目录
      },
    },
    //  optimization: {
    //   minimize: true, // 强制开启压缩（默认开发环境为false）
    //   minimizer: [
    //     new TerserPlugin({
    //       // 匹配所有环境（开发/生产）
    //       test: /\.js(\?.*)?$/i,
    //       terserOptions: {
    //         compress: {
    //           // 移除所有console方法（包括log、warn、error等）
    //           drop_console: true,
    //           // 移除debugger
    //           drop_debugger: true,
    //           // 额外处理：移除console.*的函数调用
    //           pure_funcs: [
    //             "console.log",
    //             "console.warn",
    //             "console.error",
    //             "console.info",
    //             "console.debug",
    //             "console.table",
    //             "console.group",
    //           ],
    //         },
    //         // 美化输出（可选，生产环境可关闭）
    //         format: {
    //           comments: false, // 移除注释
    //         },
    //       },
    //       // 保留license信息（可选）
    //       extractComments: false,
    //     }),
    //   ],
    // },
  },
  chainWebpack(config) {
    // 设置HTML标题
    config.plugin("html").tap((args) => {
      args[0].title = "Where To Know"; // 设置应用标题
      return args;
    });

    config.module
      .rule("svg")
      .exclude.add(resolve("src/icons")) // 处理svg目录
      .end();
    config.module
      .rule("svg-sprite-loader")
      .test(/\.svg$/)
      .include.add(resolve("src/icons")) // 处理svg目录
      .end()
      .use("svg-sprite-loader")
      .loader("svg-sprite-loader")
      .options({
        symbolId: "icon-[name]",
      });

    config.module
      .rule("vue")
      .use("vue-loader")
      .loader("vue-loader")
      .tap((options) => {
        options.compilerOptions.directives = {
          html(node, directiveMeta) {
            (node.props || (node.props = [])).push({
              name: "innerHTML",
              value: `xss(_s(${directiveMeta.value}))`,
            });
          },
        };
        return options;
      });
  },
  devServer: {
    proxy: {
      // 代理所有以 /api 开头的请求
      "/api": {
        target: "https://api.wheretoknow.com", // 修正为 HTTPS
        changeOrigin: true,
        secure: false, // 开发环境可以接受不安全的证书
        ws: true, // 代理 WebSocket 连接（如果需要）
        logLevel: "debug", // 打印代理日志，便于调试
        pathRewrite: {
          "^/api": "", // 去掉 /api 前缀
        },
        // onProxyReq(proxyReq) {
        //   console.log('代理请求头:', proxyReq.getHeaders()) // 打印实际发出的请求头
        // },
        // onError(err) {
        //   console.error('代理错误:', err)
        // }
      },
    },
  },
});
